/*
 * dsem_creador_recursos.cpp
 *
 *  Created on: Dec 24, 2013
 *      Author: m
 */

#include "CPrinter.h"
#include "DSEMCommon.h"
#include "MessageQueue.h"
#include "ProcessAux.h"


using ipc::MessageQueue;
using ipc::CPrinter;

int main ( int argc, char* argv[] )
{

    CPrinter::setHeader( "dsem_creador_recursos" );

    MessageQueue<PedidoCreacionDSEM> colaPedidosCreacion =
            MessageQueue<PedidoCreacionDSEM>::get( DSEM_IPC_BASEFILE, RESOURCE_CREATION_QUEUE );

    if (!DSEM_ENABLED) {
        CPrinter::printOut( "DESHABILITADO POR CONFIGURACION, ESTABLECER DSEM_ENABLED EN 1." );
    	exit (0);
    }

    CPrinter::printOut( "INICIADO" );

    while ( true )
    {
        bool crearRecursos = true;
        PedidoCreacionDSEM pedido;

        // Espero pedidos de creacion de recursos
        pedido = colaPedidosCreacion.get(0);

        switch( pedido.tipo )
        {
        case PedidoCreacionDSEM::SIGNALER:
        {
            CPrinter::printOut( "Creando un signaler sobre el semaforo: %s(%c) con nombre: %s", pedido.basefile, pedido.key, pedido.semName );

            Argv args;
            args.pushArg( pedido.basefile );
            args.pushArg( pedido.key );
            args.pushArg( pedido.semName );
            ProcessAux::launchProcess( "./dsSignaler", 1, args );
        }
            break;


        case PedidoCreacionDSEM::WAITER:
        {
            CPrinter::printOut( "Creando un waiter sobre el semaforo: %s(%c) con nombre: %s", pedido.basefile, pedido.key, pedido.semName );

            Argv args;
            args.pushArg( pedido.basefile );
            args.pushArg( pedido.key );
            args.pushArg( pedido.semName );
            ProcessAux::launchProcess( "./dsWaiter", 1, args );
        }
            break;
        }

    }

    return 0;
}
